/*===================================================================
 说明：
	运动管理模块。本模块中运动量不受用户单位控制，始终为米(距离,海拔)单位
 ==================================================================*/
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import "FSFoundation.h"

typedef NS_ENUM(NSInteger, FSSportState) {
	FSSportStateStop		,		//停止状态
	FSSportStatePause		,		//暂停状态
	FSSportStateRunning		,		//运动状态
};

typedef NS_ENUM(NSInteger, FSSportMode) {
	FSSportModeNormal		,		//常规模式
	FSSportModeTimer		,		//倒计时模式
	FSSportModeDistance		,		//倒计距离模式
	FSSportModeCalories		,		//倒计卡路里模式
	FSSportModeCounter		,		//倒计步模式
};

typedef void(^FSSportResult) (NSArray <FSRecord *> *records);

//==================================================================
@protocol FSSportDelegate <NSObject>

@optional

- (void)didRecordPoint:(FSRecordPoint *)point;			//记录点

- (void)didFinshSportWithRecord:(FSRecord *)record;		//运动已完成（由外部进行记录相关处理，并由外部决定上传记录） (2.2)

- (void)didUpdateLocation:(CLLocation *)location;		//更新定位
- (void)didErrorLocation:(NSError *)error;				//定位错误

@end

#pragma mark -
@interface FSSport : NSObject <CLLocationManagerDelegate>

+ (void)sportForUnfinished:(FSSportResult)result;		//获取未完成的运动记录，2.2开始需要在框架外部调用此方法获取未完成的运动，并作非正常数据检测 (2.2)

+ (instancetype)current;		//当前运动

- (void)createWithType:(FSSportType)type;
- (void)createWithType:(FSSportType)type model:(FSModel *)model;

- (void)createWithDevice:(FSDevice *)device;
- (void)createWithDevice:(FSDevice *)device model:(FSModel *)model;

@property (nonatomic, assign) id<FSSportDelegate>	delegate;
@property (nonatomic, assign)	NSInteger		tag;

@property (nonatomic, readonly) FSDevice		*device;
@property (nonatomic, readonly) FSModel			*model;

#pragma mark - 运动标识
@property (nonatomic, readonly) uint			sid;			//运动ID
@property (nonatomic, readonly) FSSportType		type;			//运动类型
@property (nonatomic, readonly) FSSportState	state;			//运动状态

@property (nonatomic, readonly) NSDate			*startTime;		//运动开始时间

#pragma mark - 运动模式
@property (nonatomic, assign)	FSSportMode		mode;			//运动模式（设置运动倒计模式）
@property (nonatomic, assign)	CGFloat			modeValue;		//运动模式值（当对应模式的值到达此值时将自动停止运动）

@property (nonatomic, assign)	uint			second;         //运动倒计秒（运动开始时的倒计秒）

#pragma mark - 运动量
@property (nonatomic, assign)	double			distance;		//运动距离（米）
@property (nonatomic, assign)	CGFloat			calories;		//运动卡路里（大卡）
@property (nonatomic, assign)	int				count;			//运动计数（步数、转数等）
@property (nonatomic, assign)	int				sumtime;		//运动总时长（runtime + freetime）
@property (nonatomic, assign)	int				runtime;		//运动时长（秒）
@property (nonatomic, assign)	int				freetime;		//暂停时长（秒）

#pragma mark - 速度
@property (nonatomic, assign)	CGFloat			speed;			//当前速度（公里/时）
@property (nonatomic, readonly) CGFloat			maxSpeed;		//最大时速
@property (nonatomic, readonly) CGFloat			avgSpeed;		//平均时速

#pragma mark - 高度
@property (nonatomic, assign)	CGFloat			height;			//当前高度（海拔、坡度、阻力）
@property (nonatomic, readonly) CGFloat			maxHeight;		//最大高度
@property (nonatomic, readonly) CGFloat			minHeight;		//最小高度
@property (nonatomic, readonly) CGFloat			riseHeight;		//上升高度（最大高度-开始高度）
@property (nonatomic, readonly) CGFloat			climbHeight;	//累计爬升（米）（有点难计算，暂未实现😁）

#pragma mark - 频率
@property (nonatomic, assign)	int				freq;			//当前频率（步频、踏频）
@property (nonatomic, readonly) int				maxFreq;		//最大频率
@property (nonatomic, readonly) int				avgFreq;		//平均频率

#pragma mark - 心率
@property (nonatomic, assign)	int				heart;			//当前心率（次/分钟）
@property (nonatomic, readonly) int				maxHeart;		//最大心率

#pragma mark - 功耗
@property (nonatomic, assign)	CGFloat			power;			//当前功耗（电流、瓦特）
@property (nonatomic, readonly) CGFloat			maxPower;		//最大功耗

#pragma mark - 定位
@property (nonatomic, assign)	BOOL			enableLocation;		//使能定位
@property (nonatomic, readonly) CLLocation		*location;			//定位位置
@property (nonatomic, readonly) CLLocation		*updateLocation;	//最新位置

#pragma mark - 运动控制
- (void)start;		//开始或继续运动
- (void)pause;
- (void)stop;

@end
